// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.SQLObject;
// import com.alibaba.druid.sql.ast.SQLStatementImpl;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.Collections;
// import java.util.List;
#pragma once
#include <list>
#include "../SQLStatementImpl.h"
#include "SQLAlterStatement.h"
class SQLName;
class SQLAlterCharacter;
class SQLAlterDatabaseItem;
class SQLAssignItem;

class SQLAlterDatabaseStatement : public SQLStatementImpl, virtual public SQLAlterStatement
{
public:
  SQLName_ptr name;
  BOOL_ptr upgradeDataDirectoryName;
  std::shared_ptr<SQLAlterCharacter> character;

  std::shared_ptr<SQLAlterDatabaseItem> item;

  SQLAssignItem_list_ptr properties;

  SQLAlterDatabaseStatement();

  SQLAlterDatabaseStatement(DbType_ptr  dbType);
  SHAREDOBJECT(SQLAlterDatabaseStatement);

  SQLName_ptr getName();

  void setName(SQLName_ptr name);

  std::shared_ptr<SQLAlterCharacter> getCharacter();

  void setCharacter(std::shared_ptr<SQLAlterCharacter> character);

  BOOL_ptr isUpgradeDataDirectoryName();

  void setUpgradeDataDirectoryName(BOOL_ptr upgradeDataDirectoryName);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  std::shared_ptr<SQLAlterDatabaseItem> getItem();

  void setItem(std::shared_ptr<SQLAlterDatabaseItem> item);

  SQLAssignItem_list_ptr getProperties();

  // @Override
  SQLObject_list_ptr  getChildren();
};
